import request from '@/utils/request';
import type { BaseTreeModel, TreeNodeModel, ResponseBaseData } from '@/api/model/baseModel';

export const basePath = '/appsys/menu';
/** sysdeskmenumanage */
export interface AppMenuDto extends BaseTreeModel {
  /** 父节点id */
  parentId?: any;
  /** 菜单名称 */
  menuName?: any;
  /** 菜单编码 */
  menuCode?: any;
  /** 访问路径 */
  menuUrl?: any;
  /** 排序 */
  treesort?: any;
  /** 图标 */
  menuIcon?: any;
  /** 菜单标记 */
  menuMark?: any;
  /** 菜单标记失效时间 */
  markEndDate?: any;
  /** 是否隐藏 */
  isHidden?: any;
  /** 菜单标记 */
  siteType?: any;
  /** 重定向 */
  redirectType?: any;
  /** 组件相对路径 */
  component?: string;
  /** 站外重定向地址 */
  offSiteRedirect?: any;
  /** 子应用 */
  microAppId?: any;
  /** attribute01 */
  attribute01?: any;
}

/**
 * 前后菜单配置数据
 * @param menuType 菜单类型 1 前台 0后台
 * @returns 表格数据
 */
export function getAppMenuNode(menuType): Promise<ResponseBaseData<TreeNodeModel[]>> {
  return request.get(`${basePath}/getSubMenuTree/5/-1/${menuType}`);
}

/**
 * 前后菜单配置数据查询
 * @param params 查询参数
 * @param menuType 菜单类型 1 前台 0后台
 * @returns 查询结果
 */
export function searchAppMenu(params, menuType) {
  return request({
    url: `${basePath}/searchMenuTree/${menuType}?searchText=${params}`,
    method: 'get'
  });
}

/**
 * 添加保存表单数据
 * @param form 表单数据
 */
export function saveAppMenu(form: AppMenuDto): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/addMenu`, form);
}

/**
 * 编辑保存表单数据
 * @param form 表单数据
 */
export function editSaveAppMenu(form: AppMenuDto): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/updateMenu`, form);
}

/**
 * 根据id集合删除数据
 * @param id 选中id集合
 */
export function delAppMenuAll(ids: string): Promise<ResponseBaseData<any>> {
  return request.delete(`${basePath}/batchDeleteMenu/v1?menuIds=${ids}`);
}

/**
 * 根据id删除数据
 * @param id 选中id
 */
export function delAppMenu(id: string): Promise<ResponseBaseData<any>> {
  return request.delete(`${basePath}/deleteMenu?menuIds=${id}`);
}

/**
 * 获取编辑数据
 * @param id 当前行id
 * @returns 表单数据
 */
export function getAppMenu(id: string): Promise<ResponseBaseData<AppMenuDto>> {
  return request.get(`${basePath}/getMenu/${id}`);
}

/**
 * 更新是否隐藏
 * @param params 开关参数
 */
export function updateIshidden(params: any): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/updateMenu`, params);
}

/**
 * 保存排序
 * @param params 保存内容
 */
export function saveMenuList(params: any): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/saveMenuList`, params);
}

/**
 * 获取树选择数据
 * @param level 层级
 * @param pid 根节点id
 * @param menuType 菜单类型 1 前台 0后台
 * @returns 树数据
 */
export function getTreeData(level, pid, menuType) {
  return request({
    url: `${basePath}/getSubMenuTree/${level}/${pid}/${menuType}`,
    method: 'get'
  });
}

/**
 * 树选择查询数据
 * @param baseUrl url
 * @param params 搜索参数
 * @param menuType 菜单类型 1 前台 0后台
 * @returns
 */
export function searchTree(baseUrl, params, menuType) {
  return request({
    url: `${baseUrl}/searchMenuTree/${menuType}`,
    data: params,
    method: 'get'
  });
}

/**
 * 菜单编码唯一检验
 * @param params 菜单编码内容
 */
export function checkMenuCodeParam(params: any) {
  return request.post(`${basePath}/checkMenuCode`, params);
}

/**
 * 唯一检验
 * @param params  访问路径内容
 */
export function checkMenuUrlParam(params: any) {
  return request.post(`${basePath}/checkMenuUrl`, params);
}

/**
 * 获取权限配置数据
 * @param params 权限表格参数
 * @returns 权限表格数据
 */
export function getMenuPermList(params: any): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/getMenuPermListByPage`, params);
}

/**
 * 权限迁移
 * @param menuId 当前行id
 * @param params 迁移数据
 */
export function saveMenuPermList(menuId: any, params: any): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/saveResourceList/${menuId}`, params);
}

/**
 * 权限数据删除
 * @param menuId 当前行id
 * @param ids 删除id集合
 */
export function deleteMenuPermList(menuId: any, ids: any): Promise<ResponseBaseData<any>> {
  return request.delete(`${basePath}/deleteResourceByIdList/${menuId}`, { data: ids });
}

/**
 * 权限保持
 * @param params 保存参数
 */
export function pushMenuPerm(params: any): Promise<ResponseBaseData<any>> {
  return request.post(`${basePath}/pushMenuPerm`, params);
}

/**
 * 获取子应用
 * @param params 子应用参数
 * @returns 子应用数据
 */
export function getMicroAppList(params: any): Promise<ResponseBaseData<any>> {
  return request.post(`/appsys/microapps/search/v1`, params);
}
